Redirect and/or gag stdout/stderr.
Documentation (with examples): https://docs.rs/gag/
Limitations
- Won't work if something else has called
std::io::set_print
(currently unstable). Unfortunately, this function doesn't actually redirect the stdio file descriptor, it just replaces thestd::io::stdout
writer. - Won't work in rust test cases. The rust test cases use
std::io::set_print
to redirect stdout. You can get around this though by using the--nocapture
argument when running your tests.
TODO:
- General:
- Better error handling?
- Redirect:
- Be generic over references. That is, accept both a reference to an AsRawFd or
an AsRawFd. Unfortunately, I don't know if this is even possible. Borrow
doesn't work because I really want the following constraint:
impl<F> Redirect<F> where F: BorrowMut<T>, T: AsMut<AsRawFd>
so I can writefile.borrow_mut().as_mut()
but that would be ambiguous...
- Be generic over references. That is, accept both a reference to an AsRawFd or
an AsRawFd. Unfortunately, I don't know if this is even possible. Borrow
doesn't work because I really want the following constraint:
- Buffer:
- Deallocate the buffer as it is read (FALLOC_FL_PUNCH_HOLE) if possible.